Spring Boot অ্যাপ্লিকেশনে Unit Testing এবং Integration Testing অত্যন্ত গুরুত্বপূর্ণ। Unit Testing এর মাধ্যমে একক ফাংশন বা মেথডের কার্যকারিতা পরীক্ষা করা হয়, যেখানে Integration Testing ব্যবহার করে পুরো সিস্টেম বা একাধিক উপাদানের ইন্টিগ্রেশন পরীক্ষা করা হয়।
Spring Boot-এ JUnit, Mockito, এবং Spring Test এর মতো টুলস ব্যবহার করা হয় Unit এবং Integration Testing করতে। Spring Boot স্বয়ংক্রিয়ভাবে এই টেস্টিং সরঞ্জামগুলির জন্য কনফিগারেশন এবং সমর্থন প্রদান করে, যা ডেভেলপারদের দ্রুত এবং কার্যকরী টেস্টিং করতে সহায়তা করে।
Unit Testing in Spring Boot
Unit Testing এর মাধ্যমে একক মেথড বা ক্লাসের কার্যকারিতা পরীক্ষা করা হয়, যাতে এটি প্রত্যাশিত ফলাফল প্রদান করে কিনা তা নিশ্চিত করা যায়। Spring Boot-এ Unit Testing করতে JUnit এবং Mockito খুব জনপ্রিয় টুল।
১. JUnit: ইউনিট টেস্ট করার জন্য Spring Boot-এ JUnit ব্যবহৃত হয়। JUnit 5 ব্যবহার করা হচ্ছে Spring Boot অ্যাপ্লিকেশনের জন্য।
২. Mockito: Mockito ব্যবহার করে ডিপেনডেন্সি ইনজেকশন মক (Mock) করা হয়, যাতে ডেটাবেস বা অন্য কোন এক্সটার্নাল সার্ভিসে যাওয়ার প্রয়োজন না হয়।
উদাহরণ: Unit Testing with Mockito and JUnit
UserService ক্লাসের Unit Test:
import static org.mockito.Mockito.*;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class UserServiceTest {
@Mock
private UserRepository userRepository; // Mock Repository
@InjectMocks
private UserService userService; // Inject Mocks into Service
@Test
public void testFindByName() {
// Arrange
User user = new User(1L, "John Doe", "john@example.com");
when(userRepository.findByName("John Doe")).thenReturn(user);
// Act
User result = userService.findByName("John Doe");
// Assert
assertEquals("John Doe", result.getName());
verify(userRepository, times(1)).findByName("John Doe");
}
}
এখানে:
@Mockব্যবহার করেUserRepositoryমক করা হয়েছে।@InjectMocksব্যবহার করেUserServiceক্লাসে মক অবজেক্ট ইনজেক্ট করা হয়েছে।when(...).thenReturn(...)ব্যবহার করে মক অবজেক্টের প্রত্যাশিত আউটপুট নির্ধারণ করা হয়েছে।assertEqualsব্যবহার করে টেস্টের আউটপুট যাচাই করা হয়েছে।
Integration Testing in Spring Boot
Integration Testing হল একাধিক ইউনিট বা সিস্টেমের অংশের একত্রে কার্যকারিতা পরীক্ষা করার প্রক্রিয়া। Spring Boot-এ @SpringBootTest, @DataJpaTest, এবং @WebMvcTest এর মতো এনোটেশন ব্যবহার করে Integration Testing করা হয়।
১. @SpringBootTest: পুরো Spring Boot অ্যাপ্লিকেশনকে লোড করে Integration Testing চালাতে ব্যবহৃত হয়।
২. @DataJpaTest: ডেটাবেস রিলেটেড ফিচারগুলো টেস্ট করতে ব্যবহৃত হয়। এটি শুধুমাত্র JPA সম্পর্কিত কম্পোনেন্টগুলো লোড করে, যেমন: Repository এবং Entity ক্লাস।
উদাহরণ: Integration Testing with @SpringBootTest
UserService ক্লাসের Integration Test:
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class UserServiceIntegrationTest {
@Autowired
private UserService userService; // Inject the real service
@Test
public void testSaveAndFindUser() {
// Arrange
User user = new User(1L, "John Doe", "john.doe@example.com");
userService.saveUser(user);
// Act
User foundUser = userService.getUserByName("John Doe");
// Assert
assertNotNull(foundUser);
assertEquals("John Doe", foundUser.getName());
}
}
এখানে:
@SpringBootTestব্যবহার করা হয়েছে Spring Boot অ্যাপ্লিকেশনের পুরো কনটেক্সট লোড করার জন্য।userService.saveUserএবংuserService.getUserByNameমেথড ব্যবহার করে পুরো সিস্টেমে ডেটা সেভ এবং রিট্রিভ করা হয়েছে।
৩. @WebMvcTest: শুধুমাত্র ওয়েব লেয়ারের টেস্ট (Controller Layer) করতে ব্যবহৃত হয়।
৪. @DataJpaTest: JPA এবং ডেটাবেসের সাথে কাজ করা টেস্ট করতে ব্যবহৃত হয়।
Example: @DataJpaTest for Repository Layer Testing
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
@DataJpaTest
public class UserRepositoryTest {
@Autowired
private UserRepository userRepository;
@Test
public void testFindByName() {
// Arrange
User user = new User(1L, "John Doe", "john.doe@example.com");
userRepository.save(user);
// Act
User foundUser = userRepository.findByName("John Doe");
// Assert
assertNotNull(foundUser);
assertEquals("John Doe", foundUser.getName());
}
}
এখানে:
@DataJpaTestব্যবহার করে শুধুমাত্র JPA রেপোজিটরি এবং ডেটাবেসের সাথে সম্পর্কিত টেস্ট করা হয়েছে।userRepository.saveএবংuserRepository.findByNameএর মাধ্যমে ডেটাবেস অপারেশন টেস্ট করা হয়েছে।
Spring Boot Testing এর জন্য প্রয়োজনীয় কিছু টুল
- JUnit 5: Unit Testing এর জন্য ব্যবহার করা হয়।
- Mockito: Mocking এর জন্য ব্যবহৃত হয়, যাতে এক্সটার্নাল সার্ভিস বা ডেটাবেসের সাথে যোগাযোগ না করে টেস্ট করা যায়।
- Spring Test: Spring Boot অ্যাপ্লিকেশন টেস্ট করার জন্য
@SpringBootTest,@DataJpaTest,@WebMvcTestব্যবহার করা হয়। - AssertJ: Assertions এর জন্য ব্যবহৃত হয়, যা আরো বাচনীয় এবং পরিষ্কার টেস্ট ফলাফল প্রদান করে।
- H2 Database: ইন-মেমরি ডেটাবেস হিসেবে ব্যবহার করা হয় টেস্টিংয়ের জন্য।
সারাংশ
Spring Boot-এ Unit Testing এবং Integration Testing অত্যন্ত গুরুত্বপূর্ণ, যাতে অ্যাপ্লিকেশনটির কার্যকারিতা এবং বিভিন্ন অংশের ইন্টিগ্রেশন সঠিকভাবে কাজ করছে কিনা তা নিশ্চিত করা যায়। JUnit এবং Mockito ব্যবহার করে Unit Testing করা হয়, যেখানে @SpringBootTest, @DataJpaTest, এবং @WebMvcTest ব্যবহার করে Integration Testing করা হয়। Spring Boot টেস্টিং সরঞ্জাম সরবরাহ করে, যা ডেভেলপারদের দ্রুত এবং কার্যকরী টেস্টিং করতে সহায়তা করে।
Read more